package administration;

import java.util.List;


import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;

import controlsystem.CM;
import controlsystem.Course;

import IO.Hash;



/**
 * 
 * @author Dario
 * Deze klassen regelt het verkeer naar de datastore en houdt bij welke admin aangelogd is per sessie.
 */
public class AdminManager {
	
	private Admin currAdmin;
	private List<Admin> admins;
	
	/**
	 * De constructor laadt de admins in en maakt een eerste admin aan.
	 */
	public AdminManager(){
		loadAdmins();
		CM.get().save(new Course("qsdf","qsdf","qsdf",5));
		save(new Admin("peno",Hash.getHash("test")));
	}
	
	
	
	/**
	 * Deze methode laat toe om de huidige Admin aan te vragen.
	 * @return de huidige admin
	 */
	public Admin getCurrentAdmin(){
		
		return currAdmin;
	}
	
	/**
	 * Deze methode slaat een admin op. 
	 * @param admin Het admin object dat opgeslaan moet worden
	 */
	public void save(Admin admin){
		Objectify ofy = ObjectifyService.begin();
		ofy.put(admin);
	}
	
	public Admin addAdmin(String un, String pwd){
		Admin a = new Admin(un, Hash.getHash(pwd));
		return a;
	}
	
	/**
	 * Deze methode logt de admin uit.
	 * @param admin
	 */
	public void logOut(){
		currAdmin=null;
		System.out.println("currAdmin is null"); //debugging
	}
	/**
	 * Deze methode controleert de login. 
	 * @param a Het admin object dat wil inloggen
	 * @return true als de login geslaagd is false als de credentials niet juist zijn.
	 */
	public boolean verifyLogin(Admin a){
		loadAdmins();
		Admin tempAdmin=null;
		for(int i = 0; admins.size() > i; i++){
			Admin admin = admins.get(i);
			if(a.getUserName().equals(admin.getUserName())){
				tempAdmin=admin;
			}
		}
		if(tempAdmin==null){
			System.out.println("Admin bestaat niet"); //debugging
			return false;
		}
		else{
			if(tempAdmin.getPwd().equals(Hash.getHash(a.getPwd()))){
				currAdmin=tempAdmin;
				System.out.println("Passwoord is juist."); // voor debugging
				return true;
			}
			else{
				System.out.println("Passwoord is fout"); // voor debugging
				return false;
			}
		}
		
		
	}
	/**
	 * Deze methode laadt alle Admin objecten uit de datastore in een List.
	 */
	private void loadAdmins(){
		Objectify ofy = ObjectifyService.begin();
		admins = ofy.query(Admin.class).list();
	}
}
